package logica.persistencia;

import java.util.List;

import org.jdom.Element;

import xml.ConstantesXml;
import xml.XMLManager;

import logica.Atributo;
import logica.AtributoRepetidoException;
import logica.Entidad;
import logica.IdExternoRepetidoException;
import logica.Identificador;

public class IdentificadorPersistente {
	private Identificador identificador;
	private Element padre;

	public Element getPadre() {
		return padre;
	}


	public void setPadre(Element padre) {
		this.padre = padre;
	}


	public IdentificadorPersistente(Identificador identificador) {
		this.setIdentificador(identificador);
	}
	
	
	public Identificador getIdentificador() {
		return identificador;
	}

	public void setIdentificador(Identificador identificador) {
		this.identificador = identificador;
	}
	
	public void serializar() {
		if (identificador.getEntidades().size() > 0) {
			for (Entidad ent : identificador.getEntidades()) {
				Element componeneteIdentificador = new Element (ConstantesXml.COMPONENTE_IDENTIFICADOR_ENTIDAD);	
				EntidadPersistente entP = ent.getObjetoDiagramaPersistente();
				int idRef = entP.getIdentificador();
				String nombreRef = ent.getNombre();
				componeneteIdentificador.setAttribute(ConstantesXml.ATRIBUTO_ID_REF, String.valueOf(idRef));
				componeneteIdentificador.setAttribute(ConstantesXml.ATRIBUTO_NOMBRE_REF, nombreRef);
				XMLManager.getInstance().agregarElementoAElemento(padre, componeneteIdentificador);
			}
		}
		
		if (identificador.getAtributos().size() > 0) {
			for (Atributo atrib : identificador.getAtributos()) {
				AtributoPersistente atribP = atrib.getAtributoPersistente();
				Element componeneteIdentificador = new Element (ConstantesXml.COMPONENTE_IDENTIFICADOR_ATRIBUTO);	
				int idRef = atribP.getIdentificador();
				String nombreRef = atrib.getNombre();
				componeneteIdentificador.setAttribute(ConstantesXml.ATRIBUTO_ID_REF, String.valueOf(idRef));
				componeneteIdentificador.setAttribute(ConstantesXml.ATRIBUTO_NOMBRE_REF, nombreRef);
				XMLManager.getInstance().agregarElementoAElemento(padre, componeneteIdentificador);
			}
		}
		
	}
	
	
	public void hidratar(Element elementoIdentificador) {
		@SuppressWarnings("unchecked")
		List <Element> componenteIdentificadorAtribLista = elementoIdentificador.getChildren(ConstantesXml.COMPONENTE_IDENTIFICADOR_ATRIBUTO);
		for (Element componenteIdentificadorAtrib: componenteIdentificadorAtribLista) {
			if (componenteIdentificadorAtrib != null) {
				String claveHashAtrib = componenteIdentificadorAtrib.getAttributeValue(ConstantesXml.ATRIBUTO_ID_REF);
				String nombreAtrib = componenteIdentificadorAtrib.getAttributeValue(ConstantesXml.ATRIBUTO_NOMBRE_REF);
				Atributo atrib = (Atributo) XMLManager.getInstance().objtenerObjetoDiagramaConClave(claveHashAtrib);
				if (atrib != null && atrib.getNombre().equals(nombreAtrib)) {
					try {
						this.identificador.agregarAtributoIdentificador(atrib);
					} catch (AtributoRepetidoException e) {
						e.printStackTrace();
					}
				}
			}
		}
		@SuppressWarnings("unchecked")
		List <Element> componenteIdentificadorEntLista = elementoIdentificador.getChildren(ConstantesXml.COMPONENTE_IDENTIFICADOR_ENTIDAD);
		for (Element componenteIdentificadorEnt: componenteIdentificadorEntLista) {	
			if (componenteIdentificadorEnt != null) {
				Entidad ent = EntidadPersistente.hidratarEntidadEnHash(componenteIdentificadorEnt);
				try {
					this.identificador.agregarEntidadIdentificadora(ent);
				} catch (IdExternoRepetidoException e) {
					e.printStackTrace();
				}	
			}
		}
	}

}
